Minimization of deterministic finite automata